package entity

import (
	"save-kindle/source/ddd/definition"
	"save-kindle/source/ddd/dp"
	"strings"
)

// Chapter 章节: 从原始网页数据中获取 章节：顺序(根据目录中的顺序)、标题 和 正文
type Chapter struct {
	dp.BookChapter
	ChapterParser definition.ChapterParser
	// 地址 id
	chapterUrl string
	// 原始网页内容

	// 标题
	title string
	// 正文

	// 上一章
	// 下一章
	pages []*Page
}

func NewChapter(chapter dp.BookChapter, parser definition.Parser) *Chapter {
	c := &Chapter{
		BookChapter:   chapter,
		ChapterParser: parser,
	}
	c.GetPages(parser)

	return c
}

func (chapter *Chapter) GetChapterTitle() string {
	return chapter.BookChapter.Title
}

// getPages 获取 章节 的 所有 页
func (chapter *Chapter) GetPages(parser definition.Parser) []*Page {
	pageNo := 1
	hasNextPage := true

	for hasNextPage {
		page := NewPage(chapter.BookChapter, parser, pageNo)
		chapter.pages = append(chapter.pages, page)

		hasNextPage = page.HasNextPage
		pageNo++
	}
	return chapter.pages
}

func (chapter *Chapter) GetChapterStr() string {
	// 判断两页之间 是换行 还是连接
	sb := strings.Builder{}
	for i := range chapter.pages {
		page := chapter.pages[i]
		sb.WriteString(page.GetCurrentPageStr())
	}
	return sb.String()
}
